Software running on an untrusted host is inherently vulnerable to inspection and modification. Recent advances on the theoretical level have shown both negative and positive results on the possibility of protecting software within this severe threat model. However, little is known about the type of application one usually wants to protect.
Intuitively, any protection scheme other than a physical one depends on the operation of a finite state machine. Ultimately, given physical access, any finite state machine can be examined and modified at will given enough time and effort. However, increasing deployment of software can be observed on open architectures in scenarios where the software contains secret information or where integrity of the software is required by a business model. For example, access to copyrighted music and video is increasingly controlled by software-based digital containers. Further, the experience of multi-player games relies heavily on users not being able to gain competitive advantages through cheating. Software licenses also may be enforced through technical protection mechanisms embedded in the software, and as a final example ad-supported software relies on the ads being correctly displayed and reported.
The above examples illustrate current demand for practical defense mechanisms. Even if theoretically secure protection is impossible, the question is more whether the time and effort required to attack software can be increased to make the costs outweigh the benefits. Consider a simple “Hello World” program for example. Assume one desires to protect this against modification of the “Hello World” message. Without countermeasures, an attacker could easily replace the characters “World” with “Alice,” for instance, in the binary using tools such as string and hex editors. However, even a limited amount of obfuscation would foil this straightforward attack and make it more economically viable for Alice to write her own “Hello Alice” program from scratch rather than modifying the existing “Hello World” program. From an economical point of view, the binary would then be sufficiently protected against this type of attack.
Practical obfuscation techniques are thus about raising the bar to a level that supersedes the incentive of the attacker. This incentive is composed of many factors such as perceived consequences, facilitating conditions, and habits.